// Copyright 2025 Google LLC
//
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
// You may obtain a copy of the License at
//
//     https://www.apache.org/licenses/LICENSE-2.0
//
// Unless required by applicable law or agreed to in writing, software
// distributed under the License is distributed on an "AS IS" BASIS,
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
// See the License for the specific language governing permissions and
// limitations under the License.
//
// Code generated by sidekick. DO NOT EDIT.

/// A dyn-compatible, crate-private version of [super::AlertPolicyService].
#[async_trait::async_trait]
pub trait AlertPolicyService: std::fmt::Debug + Send + Sync {
    async fn list_alert_policies(
        &self,
        req: crate::model::ListAlertPoliciesRequest,
        options: gax::options::RequestOptions,
    ) -> crate::Result<gax::response::Response<crate::model::ListAlertPoliciesResponse>>;

    async fn get_alert_policy(
        &self,
        req: crate::model::GetAlertPolicyRequest,
        options: gax::options::RequestOptions,
    ) -> crate::Result<gax::response::Response<crate::model::AlertPolicy>>;

    async fn create_alert_policy(
        &self,
        req: crate::model::CreateAlertPolicyRequest,
        options: gax::options::RequestOptions,
    ) -> crate::Result<gax::response::Response<crate::model::AlertPolicy>>;

    async fn delete_alert_policy(
        &self,
        req: crate::model::DeleteAlertPolicyRequest,
        options: gax::options::RequestOptions,
    ) -> crate::Result<gax::response::Response<()>>;

    async fn update_alert_policy(
        &self,
        req: crate::model::UpdateAlertPolicyRequest,
        options: gax::options::RequestOptions,
    ) -> crate::Result<gax::response::Response<crate::model::AlertPolicy>>;
}

/// All implementations of [super::AlertPolicyService] also implement [AlertPolicyService].
#[async_trait::async_trait]
impl<T: super::AlertPolicyService> AlertPolicyService for T {
    /// Forwards the call to the implementation provided by `T`.
    async fn list_alert_policies(
        &self,
        req: crate::model::ListAlertPoliciesRequest,
        options: gax::options::RequestOptions,
    ) -> crate::Result<gax::response::Response<crate::model::ListAlertPoliciesResponse>> {
        T::list_alert_policies(self, req, options).await
    }

    /// Forwards the call to the implementation provided by `T`.
    async fn get_alert_policy(
        &self,
        req: crate::model::GetAlertPolicyRequest,
        options: gax::options::RequestOptions,
    ) -> crate::Result<gax::response::Response<crate::model::AlertPolicy>> {
        T::get_alert_policy(self, req, options).await
    }

    /// Forwards the call to the implementation provided by `T`.
    async fn create_alert_policy(
        &self,
        req: crate::model::CreateAlertPolicyRequest,
        options: gax::options::RequestOptions,
    ) -> crate::Result<gax::response::Response<crate::model::AlertPolicy>> {
        T::create_alert_policy(self, req, options).await
    }

    /// Forwards the call to the implementation provided by `T`.
    async fn delete_alert_policy(
        &self,
        req: crate::model::DeleteAlertPolicyRequest,
        options: gax::options::RequestOptions,
    ) -> crate::Result<gax::response::Response<()>> {
        T::delete_alert_policy(self, req, options).await
    }

    /// Forwards the call to the implementation provided by `T`.
    async fn update_alert_policy(
        &self,
        req: crate::model::UpdateAlertPolicyRequest,
        options: gax::options::RequestOptions,
    ) -> crate::Result<gax::response::Response<crate::model::AlertPolicy>> {
        T::update_alert_policy(self, req, options).await
    }
}

/// A dyn-compatible, crate-private version of [super::GroupService].
#[async_trait::async_trait]
pub trait GroupService: std::fmt::Debug + Send + Sync {
    async fn list_groups(
        &self,
        req: crate::model::ListGroupsRequest,
        options: gax::options::RequestOptions,
    ) -> crate::Result<gax::response::Response<crate::model::ListGroupsResponse>>;

    async fn get_group(
        &self,
        req: crate::model::GetGroupRequest,
        options: gax::options::RequestOptions,
    ) -> crate::Result<gax::response::Response<crate::model::Group>>;

    async fn create_group(
        &self,
        req: crate::model::CreateGroupRequest,
        options: gax::options::RequestOptions,
    ) -> crate::Result<gax::response::Response<crate::model::Group>>;

    async fn update_group(
        &self,
        req: crate::model::UpdateGroupRequest,
        options: gax::options::RequestOptions,
    ) -> crate::Result<gax::response::Response<crate::model::Group>>;

    async fn delete_group(
        &self,
        req: crate::model::DeleteGroupRequest,
        options: gax::options::RequestOptions,
    ) -> crate::Result<gax::response::Response<()>>;

    async fn list_group_members(
        &self,
        req: crate::model::ListGroupMembersRequest,
        options: gax::options::RequestOptions,
    ) -> crate::Result<gax::response::Response<crate::model::ListGroupMembersResponse>>;
}

/// All implementations of [super::GroupService] also implement [GroupService].
#[async_trait::async_trait]
impl<T: super::GroupService> GroupService for T {
    /// Forwards the call to the implementation provided by `T`.
    async fn list_groups(
        &self,
        req: crate::model::ListGroupsRequest,
        options: gax::options::RequestOptions,
    ) -> crate::Result<gax::response::Response<crate::model::ListGroupsResponse>> {
        T::list_groups(self, req, options).await
    }

    /// Forwards the call to the implementation provided by `T`.
    async fn get_group(
        &self,
        req: crate::model::GetGroupRequest,
        options: gax::options::RequestOptions,
    ) -> crate::Result<gax::response::Response<crate::model::Group>> {
        T::get_group(self, req, options).await
    }

    /// Forwards the call to the implementation provided by `T`.
    async fn create_group(
        &self,
        req: crate::model::CreateGroupRequest,
        options: gax::options::RequestOptions,
    ) -> crate::Result<gax::response::Response<crate::model::Group>> {
        T::create_group(self, req, options).await
    }

    /// Forwards the call to the implementation provided by `T`.
    async fn update_group(
        &self,
        req: crate::model::UpdateGroupRequest,
        options: gax::options::RequestOptions,
    ) -> crate::Result<gax::response::Response<crate::model::Group>> {
        T::update_group(self, req, options).await
    }

    /// Forwards the call to the implementation provided by `T`.
    async fn delete_group(
        &self,
        req: crate::model::DeleteGroupRequest,
        options: gax::options::RequestOptions,
    ) -> crate::Result<gax::response::Response<()>> {
        T::delete_group(self, req, options).await
    }

    /// Forwards the call to the implementation provided by `T`.
    async fn list_group_members(
        &self,
        req: crate::model::ListGroupMembersRequest,
        options: gax::options::RequestOptions,
    ) -> crate::Result<gax::response::Response<crate::model::ListGroupMembersResponse>> {
        T::list_group_members(self, req, options).await
    }
}

/// A dyn-compatible, crate-private version of [super::MetricService].
#[async_trait::async_trait]
pub trait MetricService: std::fmt::Debug + Send + Sync {
    async fn list_monitored_resource_descriptors(
        &self,
        req: crate::model::ListMonitoredResourceDescriptorsRequest,
        options: gax::options::RequestOptions,
    ) -> crate::Result<
        gax::response::Response<crate::model::ListMonitoredResourceDescriptorsResponse>,
    >;

    async fn get_monitored_resource_descriptor(
        &self,
        req: crate::model::GetMonitoredResourceDescriptorRequest,
        options: gax::options::RequestOptions,
    ) -> crate::Result<gax::response::Response<api::model::MonitoredResourceDescriptor>>;

    async fn list_metric_descriptors(
        &self,
        req: crate::model::ListMetricDescriptorsRequest,
        options: gax::options::RequestOptions,
    ) -> crate::Result<gax::response::Response<crate::model::ListMetricDescriptorsResponse>>;

    async fn get_metric_descriptor(
        &self,
        req: crate::model::GetMetricDescriptorRequest,
        options: gax::options::RequestOptions,
    ) -> crate::Result<gax::response::Response<api::model::MetricDescriptor>>;

    async fn create_metric_descriptor(
        &self,
        req: crate::model::CreateMetricDescriptorRequest,
        options: gax::options::RequestOptions,
    ) -> crate::Result<gax::response::Response<api::model::MetricDescriptor>>;

    async fn delete_metric_descriptor(
        &self,
        req: crate::model::DeleteMetricDescriptorRequest,
        options: gax::options::RequestOptions,
    ) -> crate::Result<gax::response::Response<()>>;

    async fn list_time_series(
        &self,
        req: crate::model::ListTimeSeriesRequest,
        options: gax::options::RequestOptions,
    ) -> crate::Result<gax::response::Response<crate::model::ListTimeSeriesResponse>>;

    async fn create_time_series(
        &self,
        req: crate::model::CreateTimeSeriesRequest,
        options: gax::options::RequestOptions,
    ) -> crate::Result<gax::response::Response<()>>;

    async fn create_service_time_series(
        &self,
        req: crate::model::CreateTimeSeriesRequest,
        options: gax::options::RequestOptions,
    ) -> crate::Result<gax::response::Response<()>>;
}

/// All implementations of [super::MetricService] also implement [MetricService].
#[async_trait::async_trait]
impl<T: super::MetricService> MetricService for T {
    /// Forwards the call to the implementation provided by `T`.
    async fn list_monitored_resource_descriptors(
        &self,
        req: crate::model::ListMonitoredResourceDescriptorsRequest,
        options: gax::options::RequestOptions,
    ) -> crate::Result<
        gax::response::Response<crate::model::ListMonitoredResourceDescriptorsResponse>,
    > {
        T::list_monitored_resource_descriptors(self, req, options).await
    }

    /// Forwards the call to the implementation provided by `T`.
    async fn get_monitored_resource_descriptor(
        &self,
        req: crate::model::GetMonitoredResourceDescriptorRequest,
        options: gax::options::RequestOptions,
    ) -> crate::Result<gax::response::Response<api::model::MonitoredResourceDescriptor>> {
        T::get_monitored_resource_descriptor(self, req, options).await
    }

    /// Forwards the call to the implementation provided by `T`.
    async fn list_metric_descriptors(
        &self,
        req: crate::model::ListMetricDescriptorsRequest,
        options: gax::options::RequestOptions,
    ) -> crate::Result<gax::response::Response<crate::model::ListMetricDescriptorsResponse>> {
        T::list_metric_descriptors(self, req, options).await
    }

    /// Forwards the call to the implementation provided by `T`.
    async fn get_metric_descriptor(
        &self,
        req: crate::model::GetMetricDescriptorRequest,
        options: gax::options::RequestOptions,
    ) -> crate::Result<gax::response::Response<api::model::MetricDescriptor>> {
        T::get_metric_descriptor(self, req, options).await
    }

    /// Forwards the call to the implementation provided by `T`.
    async fn create_metric_descriptor(
        &self,
        req: crate::model::CreateMetricDescriptorRequest,
        options: gax::options::RequestOptions,
    ) -> crate::Result<gax::response::Response<api::model::MetricDescriptor>> {
        T::create_metric_descriptor(self, req, options).await
    }

    /// Forwards the call to the implementation provided by `T`.
    async fn delete_metric_descriptor(
        &self,
        req: crate::model::DeleteMetricDescriptorRequest,
        options: gax::options::RequestOptions,
    ) -> crate::Result<gax::response::Response<()>> {
        T::delete_metric_descriptor(self, req, options).await
    }

    /// Forwards the call to the implementation provided by `T`.
    async fn list_time_series(
        &self,
        req: crate::model::ListTimeSeriesRequest,
        options: gax::options::RequestOptions,
    ) -> crate::Result<gax::response::Response<crate::model::ListTimeSeriesResponse>> {
        T::list_time_series(self, req, options).await
    }

    /// Forwards the call to the implementation provided by `T`.
    async fn create_time_series(
        &self,
        req: crate::model::CreateTimeSeriesRequest,
        options: gax::options::RequestOptions,
    ) -> crate::Result<gax::response::Response<()>> {
        T::create_time_series(self, req, options).await
    }

    /// Forwards the call to the implementation provided by `T`.
    async fn create_service_time_series(
        &self,
        req: crate::model::CreateTimeSeriesRequest,
        options: gax::options::RequestOptions,
    ) -> crate::Result<gax::response::Response<()>> {
        T::create_service_time_series(self, req, options).await
    }
}

/// A dyn-compatible, crate-private version of [super::NotificationChannelService].
#[async_trait::async_trait]
pub trait NotificationChannelService: std::fmt::Debug + Send + Sync {
    async fn list_notification_channel_descriptors(
        &self,
        req: crate::model::ListNotificationChannelDescriptorsRequest,
        options: gax::options::RequestOptions,
    ) -> crate::Result<
        gax::response::Response<crate::model::ListNotificationChannelDescriptorsResponse>,
    >;

    async fn get_notification_channel_descriptor(
        &self,
        req: crate::model::GetNotificationChannelDescriptorRequest,
        options: gax::options::RequestOptions,
    ) -> crate::Result<gax::response::Response<crate::model::NotificationChannelDescriptor>>;

    async fn list_notification_channels(
        &self,
        req: crate::model::ListNotificationChannelsRequest,
        options: gax::options::RequestOptions,
    ) -> crate::Result<gax::response::Response<crate::model::ListNotificationChannelsResponse>>;

    async fn get_notification_channel(
        &self,
        req: crate::model::GetNotificationChannelRequest,
        options: gax::options::RequestOptions,
    ) -> crate::Result<gax::response::Response<crate::model::NotificationChannel>>;

    async fn create_notification_channel(
        &self,
        req: crate::model::CreateNotificationChannelRequest,
        options: gax::options::RequestOptions,
    ) -> crate::Result<gax::response::Response<crate::model::NotificationChannel>>;

    async fn update_notification_channel(
        &self,
        req: crate::model::UpdateNotificationChannelRequest,
        options: gax::options::RequestOptions,
    ) -> crate::Result<gax::response::Response<crate::model::NotificationChannel>>;

    async fn delete_notification_channel(
        &self,
        req: crate::model::DeleteNotificationChannelRequest,
        options: gax::options::RequestOptions,
    ) -> crate::Result<gax::response::Response<()>>;

    async fn send_notification_channel_verification_code(
        &self,
        req: crate::model::SendNotificationChannelVerificationCodeRequest,
        options: gax::options::RequestOptions,
    ) -> crate::Result<gax::response::Response<()>>;

    async fn get_notification_channel_verification_code(
        &self,
        req: crate::model::GetNotificationChannelVerificationCodeRequest,
        options: gax::options::RequestOptions,
    ) -> crate::Result<
        gax::response::Response<crate::model::GetNotificationChannelVerificationCodeResponse>,
    >;

    async fn verify_notification_channel(
        &self,
        req: crate::model::VerifyNotificationChannelRequest,
        options: gax::options::RequestOptions,
    ) -> crate::Result<gax::response::Response<crate::model::NotificationChannel>>;
}

/// All implementations of [super::NotificationChannelService] also implement [NotificationChannelService].
#[async_trait::async_trait]
impl<T: super::NotificationChannelService> NotificationChannelService for T {
    /// Forwards the call to the implementation provided by `T`.
    async fn list_notification_channel_descriptors(
        &self,
        req: crate::model::ListNotificationChannelDescriptorsRequest,
        options: gax::options::RequestOptions,
    ) -> crate::Result<
        gax::response::Response<crate::model::ListNotificationChannelDescriptorsResponse>,
    > {
        T::list_notification_channel_descriptors(self, req, options).await
    }

    /// Forwards the call to the implementation provided by `T`.
    async fn get_notification_channel_descriptor(
        &self,
        req: crate::model::GetNotificationChannelDescriptorRequest,
        options: gax::options::RequestOptions,
    ) -> crate::Result<gax::response::Response<crate::model::NotificationChannelDescriptor>> {
        T::get_notification_channel_descriptor(self, req, options).await
    }

    /// Forwards the call to the implementation provided by `T`.
    async fn list_notification_channels(
        &self,
        req: crate::model::ListNotificationChannelsRequest,
        options: gax::options::RequestOptions,
    ) -> crate::Result<gax::response::Response<crate::model::ListNotificationChannelsResponse>>
    {
        T::list_notification_channels(self, req, options).await
    }

    /// Forwards the call to the implementation provided by `T`.
    async fn get_notification_channel(
        &self,
        req: crate::model::GetNotificationChannelRequest,
        options: gax::options::RequestOptions,
    ) -> crate::Result<gax::response::Response<crate::model::NotificationChannel>> {
        T::get_notification_channel(self, req, options).await
    }

    /// Forwards the call to the implementation provided by `T`.
    async fn create_notification_channel(
        &self,
        req: crate::model::CreateNotificationChannelRequest,
        options: gax::options::RequestOptions,
    ) -> crate::Result<gax::response::Response<crate::model::NotificationChannel>> {
        T::create_notification_channel(self, req, options).await
    }

    /// Forwards the call to the implementation provided by `T`.
    async fn update_notification_channel(
        &self,
        req: crate::model::UpdateNotificationChannelRequest,
        options: gax::options::RequestOptions,
    ) -> crate::Result<gax::response::Response<crate::model::NotificationChannel>> {
        T::update_notification_channel(self, req, options).await
    }

    /// Forwards the call to the implementation provided by `T`.
    async fn delete_notification_channel(
        &self,
        req: crate::model::DeleteNotificationChannelRequest,
        options: gax::options::RequestOptions,
    ) -> crate::Result<gax::response::Response<()>> {
        T::delete_notification_channel(self, req, options).await
    }

    /// Forwards the call to the implementation provided by `T`.
    async fn send_notification_channel_verification_code(
        &self,
        req: crate::model::SendNotificationChannelVerificationCodeRequest,
        options: gax::options::RequestOptions,
    ) -> crate::Result<gax::response::Response<()>> {
        T::send_notification_channel_verification_code(self, req, options).await
    }

    /// Forwards the call to the implementation provided by `T`.
    async fn get_notification_channel_verification_code(
        &self,
        req: crate::model::GetNotificationChannelVerificationCodeRequest,
        options: gax::options::RequestOptions,
    ) -> crate::Result<
        gax::response::Response<crate::model::GetNotificationChannelVerificationCodeResponse>,
    > {
        T::get_notification_channel_verification_code(self, req, options).await
    }

    /// Forwards the call to the implementation provided by `T`.
    async fn verify_notification_channel(
        &self,
        req: crate::model::VerifyNotificationChannelRequest,
        options: gax::options::RequestOptions,
    ) -> crate::Result<gax::response::Response<crate::model::NotificationChannel>> {
        T::verify_notification_channel(self, req, options).await
    }
}

/// A dyn-compatible, crate-private version of [super::QueryService].
#[async_trait::async_trait]
pub trait QueryService: std::fmt::Debug + Send + Sync {
    async fn query_time_series(
        &self,
        req: crate::model::QueryTimeSeriesRequest,
        options: gax::options::RequestOptions,
    ) -> crate::Result<gax::response::Response<crate::model::QueryTimeSeriesResponse>>;
}

/// All implementations of [super::QueryService] also implement [QueryService].
#[async_trait::async_trait]
impl<T: super::QueryService> QueryService for T {
    /// Forwards the call to the implementation provided by `T`.
    async fn query_time_series(
        &self,
        req: crate::model::QueryTimeSeriesRequest,
        options: gax::options::RequestOptions,
    ) -> crate::Result<gax::response::Response<crate::model::QueryTimeSeriesResponse>> {
        T::query_time_series(self, req, options).await
    }
}

/// A dyn-compatible, crate-private version of [super::ServiceMonitoringService].
#[async_trait::async_trait]
pub trait ServiceMonitoringService: std::fmt::Debug + Send + Sync {
    async fn create_service(
        &self,
        req: crate::model::CreateServiceRequest,
        options: gax::options::RequestOptions,
    ) -> crate::Result<gax::response::Response<crate::model::Service>>;

    async fn get_service(
        &self,
        req: crate::model::GetServiceRequest,
        options: gax::options::RequestOptions,
    ) -> crate::Result<gax::response::Response<crate::model::Service>>;

    async fn list_services(
        &self,
        req: crate::model::ListServicesRequest,
        options: gax::options::RequestOptions,
    ) -> crate::Result<gax::response::Response<crate::model::ListServicesResponse>>;

    async fn update_service(
        &self,
        req: crate::model::UpdateServiceRequest,
        options: gax::options::RequestOptions,
    ) -> crate::Result<gax::response::Response<crate::model::Service>>;

    async fn delete_service(
        &self,
        req: crate::model::DeleteServiceRequest,
        options: gax::options::RequestOptions,
    ) -> crate::Result<gax::response::Response<()>>;

    async fn create_service_level_objective(
        &self,
        req: crate::model::CreateServiceLevelObjectiveRequest,
        options: gax::options::RequestOptions,
    ) -> crate::Result<gax::response::Response<crate::model::ServiceLevelObjective>>;

    async fn get_service_level_objective(
        &self,
        req: crate::model::GetServiceLevelObjectiveRequest,
        options: gax::options::RequestOptions,
    ) -> crate::Result<gax::response::Response<crate::model::ServiceLevelObjective>>;

    async fn list_service_level_objectives(
        &self,
        req: crate::model::ListServiceLevelObjectivesRequest,
        options: gax::options::RequestOptions,
    ) -> crate::Result<gax::response::Response<crate::model::ListServiceLevelObjectivesResponse>>;

    async fn update_service_level_objective(
        &self,
        req: crate::model::UpdateServiceLevelObjectiveRequest,
        options: gax::options::RequestOptions,
    ) -> crate::Result<gax::response::Response<crate::model::ServiceLevelObjective>>;

    async fn delete_service_level_objective(
        &self,
        req: crate::model::DeleteServiceLevelObjectiveRequest,
        options: gax::options::RequestOptions,
    ) -> crate::Result<gax::response::Response<()>>;
}

/// All implementations of [super::ServiceMonitoringService] also implement [ServiceMonitoringService].
#[async_trait::async_trait]
impl<T: super::ServiceMonitoringService> ServiceMonitoringService for T {
    /// Forwards the call to the implementation provided by `T`.
    async fn create_service(
        &self,
        req: crate::model::CreateServiceRequest,
        options: gax::options::RequestOptions,
    ) -> crate::Result<gax::response::Response<crate::model::Service>> {
        T::create_service(self, req, options).await
    }

    /// Forwards the call to the implementation provided by `T`.
    async fn get_service(
        &self,
        req: crate::model::GetServiceRequest,
        options: gax::options::RequestOptions,
    ) -> crate::Result<gax::response::Response<crate::model::Service>> {
        T::get_service(self, req, options).await
    }

    /// Forwards the call to the implementation provided by `T`.
    async fn list_services(
        &self,
        req: crate::model::ListServicesRequest,
        options: gax::options::RequestOptions,
    ) -> crate::Result<gax::response::Response<crate::model::ListServicesResponse>> {
        T::list_services(self, req, options).await
    }

    /// Forwards the call to the implementation provided by `T`.
    async fn update_service(
        &self,
        req: crate::model::UpdateServiceRequest,
        options: gax::options::RequestOptions,
    ) -> crate::Result<gax::response::Response<crate::model::Service>> {
        T::update_service(self, req, options).await
    }

    /// Forwards the call to the implementation provided by `T`.
    async fn delete_service(
        &self,
        req: crate::model::DeleteServiceRequest,
        options: gax::options::RequestOptions,
    ) -> crate::Result<gax::response::Response<()>> {
        T::delete_service(self, req, options).await
    }

    /// Forwards the call to the implementation provided by `T`.
    async fn create_service_level_objective(
        &self,
        req: crate::model::CreateServiceLevelObjectiveRequest,
        options: gax::options::RequestOptions,
    ) -> crate::Result<gax::response::Response<crate::model::ServiceLevelObjective>> {
        T::create_service_level_objective(self, req, options).await
    }

    /// Forwards the call to the implementation provided by `T`.
    async fn get_service_level_objective(
        &self,
        req: crate::model::GetServiceLevelObjectiveRequest,
        options: gax::options::RequestOptions,
    ) -> crate::Result<gax::response::Response<crate::model::ServiceLevelObjective>> {
        T::get_service_level_objective(self, req, options).await
    }

    /// Forwards the call to the implementation provided by `T`.
    async fn list_service_level_objectives(
        &self,
        req: crate::model::ListServiceLevelObjectivesRequest,
        options: gax::options::RequestOptions,
    ) -> crate::Result<gax::response::Response<crate::model::ListServiceLevelObjectivesResponse>>
    {
        T::list_service_level_objectives(self, req, options).await
    }

    /// Forwards the call to the implementation provided by `T`.
    async fn update_service_level_objective(
        &self,
        req: crate::model::UpdateServiceLevelObjectiveRequest,
        options: gax::options::RequestOptions,
    ) -> crate::Result<gax::response::Response<crate::model::ServiceLevelObjective>> {
        T::update_service_level_objective(self, req, options).await
    }

    /// Forwards the call to the implementation provided by `T`.
    async fn delete_service_level_objective(
        &self,
        req: crate::model::DeleteServiceLevelObjectiveRequest,
        options: gax::options::RequestOptions,
    ) -> crate::Result<gax::response::Response<()>> {
        T::delete_service_level_objective(self, req, options).await
    }
}

/// A dyn-compatible, crate-private version of [super::SnoozeService].
#[async_trait::async_trait]
pub trait SnoozeService: std::fmt::Debug + Send + Sync {
    async fn create_snooze(
        &self,
        req: crate::model::CreateSnoozeRequest,
        options: gax::options::RequestOptions,
    ) -> crate::Result<gax::response::Response<crate::model::Snooze>>;

    async fn list_snoozes(
        &self,
        req: crate::model::ListSnoozesRequest,
        options: gax::options::RequestOptions,
    ) -> crate::Result<gax::response::Response<crate::model::ListSnoozesResponse>>;

    async fn get_snooze(
        &self,
        req: crate::model::GetSnoozeRequest,
        options: gax::options::RequestOptions,
    ) -> crate::Result<gax::response::Response<crate::model::Snooze>>;

    async fn update_snooze(
        &self,
        req: crate::model::UpdateSnoozeRequest,
        options: gax::options::RequestOptions,
    ) -> crate::Result<gax::response::Response<crate::model::Snooze>>;
}

/// All implementations of [super::SnoozeService] also implement [SnoozeService].
#[async_trait::async_trait]
impl<T: super::SnoozeService> SnoozeService for T {
    /// Forwards the call to the implementation provided by `T`.
    async fn create_snooze(
        &self,
        req: crate::model::CreateSnoozeRequest,
        options: gax::options::RequestOptions,
    ) -> crate::Result<gax::response::Response<crate::model::Snooze>> {
        T::create_snooze(self, req, options).await
    }

    /// Forwards the call to the implementation provided by `T`.
    async fn list_snoozes(
        &self,
        req: crate::model::ListSnoozesRequest,
        options: gax::options::RequestOptions,
    ) -> crate::Result<gax::response::Response<crate::model::ListSnoozesResponse>> {
        T::list_snoozes(self, req, options).await
    }

    /// Forwards the call to the implementation provided by `T`.
    async fn get_snooze(
        &self,
        req: crate::model::GetSnoozeRequest,
        options: gax::options::RequestOptions,
    ) -> crate::Result<gax::response::Response<crate::model::Snooze>> {
        T::get_snooze(self, req, options).await
    }

    /// Forwards the call to the implementation provided by `T`.
    async fn update_snooze(
        &self,
        req: crate::model::UpdateSnoozeRequest,
        options: gax::options::RequestOptions,
    ) -> crate::Result<gax::response::Response<crate::model::Snooze>> {
        T::update_snooze(self, req, options).await
    }
}

/// A dyn-compatible, crate-private version of [super::UptimeCheckService].
#[async_trait::async_trait]
pub trait UptimeCheckService: std::fmt::Debug + Send + Sync {
    async fn list_uptime_check_configs(
        &self,
        req: crate::model::ListUptimeCheckConfigsRequest,
        options: gax::options::RequestOptions,
    ) -> crate::Result<gax::response::Response<crate::model::ListUptimeCheckConfigsResponse>>;

    async fn get_uptime_check_config(
        &self,
        req: crate::model::GetUptimeCheckConfigRequest,
        options: gax::options::RequestOptions,
    ) -> crate::Result<gax::response::Response<crate::model::UptimeCheckConfig>>;

    async fn create_uptime_check_config(
        &self,
        req: crate::model::CreateUptimeCheckConfigRequest,
        options: gax::options::RequestOptions,
    ) -> crate::Result<gax::response::Response<crate::model::UptimeCheckConfig>>;

    async fn update_uptime_check_config(
        &self,
        req: crate::model::UpdateUptimeCheckConfigRequest,
        options: gax::options::RequestOptions,
    ) -> crate::Result<gax::response::Response<crate::model::UptimeCheckConfig>>;

    async fn delete_uptime_check_config(
        &self,
        req: crate::model::DeleteUptimeCheckConfigRequest,
        options: gax::options::RequestOptions,
    ) -> crate::Result<gax::response::Response<()>>;

    async fn list_uptime_check_ips(
        &self,
        req: crate::model::ListUptimeCheckIpsRequest,
        options: gax::options::RequestOptions,
    ) -> crate::Result<gax::response::Response<crate::model::ListUptimeCheckIpsResponse>>;
}

/// All implementations of [super::UptimeCheckService] also implement [UptimeCheckService].
#[async_trait::async_trait]
impl<T: super::UptimeCheckService> UptimeCheckService for T {
    /// Forwards the call to the implementation provided by `T`.
    async fn list_uptime_check_configs(
        &self,
        req: crate::model::ListUptimeCheckConfigsRequest,
        options: gax::options::RequestOptions,
    ) -> crate::Result<gax::response::Response<crate::model::ListUptimeCheckConfigsResponse>> {
        T::list_uptime_check_configs(self, req, options).await
    }

    /// Forwards the call to the implementation provided by `T`.
    async fn get_uptime_check_config(
        &self,
        req: crate::model::GetUptimeCheckConfigRequest,
        options: gax::options::RequestOptions,
    ) -> crate::Result<gax::response::Response<crate::model::UptimeCheckConfig>> {
        T::get_uptime_check_config(self, req, options).await
    }

    /// Forwards the call to the implementation provided by `T`.
    async fn create_uptime_check_config(
        &self,
        req: crate::model::CreateUptimeCheckConfigRequest,
        options: gax::options::RequestOptions,
    ) -> crate::Result<gax::response::Response<crate::model::UptimeCheckConfig>> {
        T::create_uptime_check_config(self, req, options).await
    }

    /// Forwards the call to the implementation provided by `T`.
    async fn update_uptime_check_config(
        &self,
        req: crate::model::UpdateUptimeCheckConfigRequest,
        options: gax::options::RequestOptions,
    ) -> crate::Result<gax::response::Response<crate::model::UptimeCheckConfig>> {
        T::update_uptime_check_config(self, req, options).await
    }

    /// Forwards the call to the implementation provided by `T`.
    async fn delete_uptime_check_config(
        &self,
        req: crate::model::DeleteUptimeCheckConfigRequest,
        options: gax::options::RequestOptions,
    ) -> crate::Result<gax::response::Response<()>> {
        T::delete_uptime_check_config(self, req, options).await
    }

    /// Forwards the call to the implementation provided by `T`.
    async fn list_uptime_check_ips(
        &self,
        req: crate::model::ListUptimeCheckIpsRequest,
        options: gax::options::RequestOptions,
    ) -> crate::Result<gax::response::Response<crate::model::ListUptimeCheckIpsResponse>> {
        T::list_uptime_check_ips(self, req, options).await
    }
}
